const { http } = uni.$u
import Vue from 'vue'
import baseConfig from '@/config/index.js'
// 初始化请求配置
http.setConfig((defaultConfig) => {
	/* defaultConfig 为默认全局配置 */
	defaultConfig.baseURL = baseConfig.baseUrl /* 根域名 */
	return defaultConfig
})
// 请求拦截
uni.addInterceptor('request', {
	invoke(args) {
		args.header = {
			'Content-Type': 'application/json',
			'X-User-Token': uni.getStorageSync('XUserToken') || '', // 从存储获取
			'X-Access-Token': uni.getStorageSync('XAccessToken') || '',
			'X-Access-Source': 'roc', // 固定值（如小程序标识）,
			...args.header,

		};
	},
	success(args) {
	},
	fail(err) {
		uni.showToast({
			title: '网络请求失败',
			icon: 'none'
		});
	}
});

// 响应拦截
uni.addInterceptor('request', {
	response(args) {
		const { code } = args;
		console.log(args, 'args')

		// // 处理 401/403 等权限错误（可选）
		// if (code === '-200') {
		// 	uni.removeStorageSync('XUserToken');
		// 	uni.removeStorageSync('XAccessToken');
		// 	uni.redirectTo({ url: '/pages/login/index' });
		// 	uni.showToast({
		// 		title: '登录已过期，请重新登录',
		// 		icon: 'none'
		// 	});
		// 	return Promise.reject('登录已过期，请重新登录');
		// }

		// 处理业务错误（根据后端规范调整）
		// if (data.code !== 200) {
		//   uni.showToast({
		//     title: data.msg || '请求失败',
		//     icon: 'none'
		//   });
		//   return Promise.reject(data);
		// }

		// return args; // 只返回接口数据部分
	}
});


// 请求成功回调处理函数
const sucFun = res => {
	return res.data;
};
// 请求失败回调处理函数
const errFun = (err) => {
	return err && err.data ? err.data : '';
};

const Geting = (url = '', data = {}, header) => {
	const req = {
		params: data,
		header
	}
	return http.get(url, req).then(sucFun).catch(errFun);
}

const Posting = (url = '', data = {}, header) => {
	return http.post(url, data, {
		header
	}).then(sucFun).catch(errFun);
}

const Puting = (url = '', data = {}) => {
	return http.put(url, data).then(sucFun).catch(errFun);
}

const Deleteing = (url = '', data = {}) => {
	const req = {
		params: data
	}
	return http.delete(url, req).then(sucFun).catch(errFun);
}

// 普通POST请求
Vue.prototype.$Posting = Posting;
Vue.Posting = Posting;
// 普通Get请求
Vue.prototype.$Geting = Geting;
Vue.Geting = Geting;

Vue.prototype.$Puting = Puting;
Vue.Puting = Puting;

Vue.prototype.$Deleteing = Deleteing;
Vue.Deleteing = Deleteing;

module.exports = (vm) => {
	require('./requestInterceptors')(vm)
	require('./responseInterceptors')(vm)
}
